package Day_0130;

/**
 * @author zxc
 * @date 2023/01/30 15:56
 **/
public class intToInteger {
    /**
     * （1）装箱就是自动将基本数据类型转换为包装器类型（int-->Integer）；
     * 调用方法：Integer的valueOf(int) 方法
     * （2）拆箱就是自动将包装器类型转换为基本数据类型（Integer-->int）。
     * 调用方法：Integer的intValue方法
     */
    public static void main(String[] args) {
        /**
         * 在通过valueOf方法创建Integer对象的时候，
         * （1）如果数值在[-128,127]之间，便返回指向IntegerCache.cache中已经存在的对象的引用；
         * ===》 即，直接从cache中取已经存在的对象，所以两个相同数值的Integer对象指向的是同一个Integer对象;
         * （2）否则创建一个新的Integer对象。
         * ===》 即，不会直接从cache中获取已经存在的对象，而是new Integer(i)去新创建一个Integer对象;
         *      即，若是数值不在[-128,127]之间的话，那么即使是两个相同数值的Integer对象所指向的也是不同对象;
         */
        intToIntegerMethod();
        // 由于doudle类型转化为Double类型的过程中，个数是无限的;
        // 对比之下 ：int类型转化为Integer类型的过程中，个数是可以确定的;
        doubleToDoubleMethod();
    }

    private static void doubleToDoubleMethod() {
        Double i1 = 100.0;
        Double i2 = 100.0;
        Double i3 = 200.0;
        Double i4 = 200.0;

        System.out.println(i1==i2);
        System.out.println(i3==i4);
    }

    private static void intToIntegerMethod() {
        Integer i1 = 100;
        Integer i2 = 100;
        Integer i3 = 200;
        Integer i4 = 200;

        System.out.println(i1 == i2);
        System.out.println(i3 == i4);
    }
}
